package calculatrice;
// ==========================================================================
//
//	- Nombre -
//
// ==========================================================================
//	<Netg>
// ==========================================================================

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import netg.*;
/**
 * <b>La classe Nombre </b>
 *
 * Un nombre ne contiendra que des 1 OU 2 OU 3 OU 4 OU 5 OU 6 OU 7 OU 8 OU 9
 *
 * @author BOAZIZ M , BOUAYADI R , DRAMSY C , OCCELLO A , SENG D
 * @version 1.0
 *
 * @see Netg
 */
public class Nombre{

	/**
	 * Un nombre contiendra un type Netg pour stocker sa valeur
	 *
	 * @see Nombre#getV()
	 * @see Nombre#setV(Netg)
	 */
	private Netg V;

	/**
	 * objet servant à verifier si l'objet courant est vraiment un nombre ou pas
	 * true si oui et false sinon
	 *
	 * @see Nombre#isActif()
	 */
	boolean actif;

	/**
	 * Constructeur de Nombre
	 * <p>
	 * Il créer un Nombre à partir d'un String S <br/>
	 * <u><b>SI ce String a la forme d'un Nombre :</b></u><br/>
	 * ex: 123456789<br/>
	 * ALORS on créer un Netg et on le met dans V et on met actif à true
	 *
	 * SINON
	 * on me atcif à false
	 *
	 * </p>
	 * @param S
	 */
	public Nombre(String S){
		//System.out.println("Nombre "+ S);
		Netg A;
		if(! verifNombre(S) )
		{
			actif = false;
			return;
		}
		//A = Float.valueOf(S).floatValue();
		A = new Netg(S);
		V = A;
		actif = true;
	}

	/**
	 * Accesseur de V
	 * @return V
	 */
	public Netg getV()
	{
		return V;
	}

	/**
	 * Verifie si l'objet courant est vraiment un nombre ou pas
	 * @return actif
	 */
	public boolean isActif()
	{
		return actif;
	}

	/**
	 * Mutateur de V
	 * @param v
	 */
	public void setV(Netg v)
	{
		V = v;
	}

	//verifie si c'est un nombre
	/**
	 * Fonction static booléen qui verfie si S est un nombre ou pas
	 * @return boolean
	 */
	static boolean verifNombre(String S)
	{
		//nombre positif
		String regex = "^([0-9.]+)$";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(S);

		if(!m.find())
			return false;
		return true;
	}

}
